package org.dromara.app.service;

import jakarta.servlet.http.HttpServletRequest;
import org.dromara.app.appParams.*;
import org.dromara.app.appReturn.*;
import org.dromara.app.domain.SkAppUser;
import org.dromara.app.domain.SkVipPrice;
import org.dromara.app.domain.sys.SysSumData;
import org.dromara.app.domain.sys.SysSumReturn;
import org.dromara.app.domain.vo.SkAppUserVo;
import org.dromara.app.domain.bo.SkAppUserBo;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;

import java.math.BigDecimal;
import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * app用户Service接口
 *
 * @author Evacuation
 * @date 2024-07-23
 */
public interface ISkAppUserService {

    /**
     * 查询app用户
     *
     * @param id 主键
     * @return app用户
     */
    SkAppUserVo queryById(Long id);

    /**
     * 分页查询app用户列表
     *
     * @param bo        查询条件
     * @param pageQuery 分页参数
     * @return app用户分页列表
     */
    TableDataInfo<SkAppUserVo> queryPageList(SkAppUserBo bo, PageQuery pageQuery);

    /**
     * 查询符合条件的app用户列表
     *
     * @param bo 查询条件
     * @return app用户列表
     */
    List<SkAppUserVo> queryList(SkAppUserBo bo);

    /**
     * 新增app用户
     *
     * @param bo app用户
     * @return 是否新增成功
     */
    Boolean insertByBo(SkAppUserBo bo);

    /**
     * 修改app用户
     *
     * @param bo app用户
     * @return 是否修改成功
     */
    Boolean updateByBo(SkAppUserBo bo);

    /**
     * 校验并批量删除app用户信息
     *
     * @param ids     待删除的主键集合
     * @param isValid 是否进行有效性校验
     * @return 是否删除成功
     */
    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);

    /**
     * 手机号码登录注册
     *
     * @param appReqister
     * @return
     */
    AppUserInfo appLogin(AppLoginReqister appReqister);

    /**
     * 发送验证码
     * @param app
     */
    void sendCode(AppSendCode app);

    /**
     * 星球在线用户列表
     * @param req
     * @return
     */
    List<AppXingQiuParams> getOnlineUserList(HttpServletRequest req);

    List<AppDaRenInfo> getFilteringExpertInformation(AppFilteringParams app, HttpServletRequest req);

    /**
     * 更新用户位置
     * @param updateAddressParams
     * @param req
     */
    void updateAddress(UpdateAddressParams updateAddressParams, HttpServletRequest req);

    /**
     * 我的页面个人信息
     *
     * @param req
     * @return
     */
    AppMyUserInfo getMyInfo(HttpServletRequest req);

    /**
     * 更改手机号码
     *
     * @param req
     * @return
     */
    void updatePhone(AppUpdatePhoneParam params, HttpServletRequest req);

    /**
     * 设置交易密码
     *
     * @param params
     * @param req
     */
    void settingPayPassword(AppSettingPayPasswordParams params, HttpServletRequest req);

    /**
     * 个人主页
     *
     * @param params
     * @param req
     * @return
     */
    AppUserHomePageReturn getUserHomePage(AppHomePageParams params, HttpServletRequest req);

    /**
     * 编辑个人资料
     *
     * @param params
     * @param req
     * @return
     */
    void updateUserInfo(AppUpdateUserInfoParams params, HttpServletRequest req) throws Exception;

    /**
     * 字典查询
     */
    List<AppDictionaryReturn> getDictionary(AppDictionaryParam params, HttpServletRequest req);

    /**
     * 在线用户列表
     *
     * @param req
     * @return
     */
    List<AppTalentHeatReturn> getTalentHeatList(HttpServletRequest req);

    /**
     * 钱包余额
     */
    BigDecimal getBalance(HttpServletRequest req);


    SkAppUser getUserById(Long userId);

    /**
     * 微信登录
     * @param openId
     * @return
     */
    AppUserInfo appLoginByOpenId(String openId);

    /**
     * 排行榜
     * @param params
     * @param req
     * @return
     */
    List<AppRangingReturn> getrankingList(AppRangintTypeParams params, HttpServletRequest req);

    /**
     * 上传语音
     * @param url
     * @param req
     */
    void uploadvideo(String url, HttpServletRequest req);

    /**
     * 更改照片
     * @param params
     * @param req
     */
    void updateUserPhoto(AppUpdateUserInfoParams params, HttpServletRequest req);

    /**
     * 更改视频
     * @param url
     * @param req
     */
    void updateVideo(String url, HttpServletRequest req);

    /**
     * 开通会员
     * @param params
     * @param req
     */
    SkVipPrice openMembership(SkAppUser skAppUser, AppVipTypeParams params, HttpServletRequest req);

    /**
     * 首页小头像和数量
     */
    Map<String, Object> homePageImageNumber(HttpServletRequest req);

    /**
     * 达人上下班
     * @param params
     * @param req
     */
    void commuting(AppCommutingParams params, HttpServletRequest req);

    /**
     * 下线
     * @param userId
     */
    void delUserInfo(String userId);

    /**
     * 操作合伙人
     * @param bo
     * @return
     */
    int updateSkAppUserSetting(SkAppUserBo bo);

    /**
     * 获取用户统计信息
     */
    SysSumReturn getSum();

    /**
     * 实名认证
     */
    void realNameAuthentication(AppRealNameAuthenticationParam params, HttpServletRequest req);

    /**
     * 获取设备ID
     */
    AppMyUserInfo getSheBeiId(AppUserIdParam params, HttpServletRequest req);

    /**
     * 获取位置
     */
    String getLocation(AppLocation params, HttpServletRequest req);

    /**
     * 绑定提现账户
     *
     * @param params
     * @param req
     */
    void bindWithdrawalAccount(AppBindWithdrawalAccountParams params,String accountIn, HttpServletRequest req);

    /**
     * 获取提现账户信息
     *
     * @param req
     * @return
     */
    AppBindWithdrawalAccountParams getWithdrawalAccount(HttpServletRequest req);

    /**
     * 统计注册用户数
     */
    Long getRegisterUserCount();

    /**
     * 解绑提现账户
     *
     * @param req
     */
    void unbindWithdrawalAccount(HttpServletRequest req);

    /**
     * 统计邀请人数
     * @param userId
     * @return
     */
    Long countInvitations(Long userId);

    /**
     * 统计达人邀请人数
     * @param userId
     * @return
     */
    Long countDarenInvitations(Long userId);


    SysSumData getSumData(String startTime, String endTime);
}
